using EOSDigital.SDK;
using System.Collections.Generic;

namespace EOSDigital.API
{
	public sealed class ExpCompValues : ValueBase
	{
		private static List<CameraValue> values;

		public static readonly CameraValue Zero;

		public static readonly CameraValue Invalid;

		public static CameraValue[] Values
		{
			get
			{
				return ExpCompValues.values.ToArray();
			}
		}

		static ExpCompValues()
		{
			ExpCompValues.Zero = new CameraValue("0", 0, 0.0, PropertyID.ExposureCompensation);
			ExpCompValues.Invalid = new CameraValue("N/A", -1, 0.0, PropertyID.ExposureCompensation);
			ExpCompValues.values = new List<CameraValue>
			{
				new CameraValue("+5", 40, 5.0, PropertyID.ExposureCompensation),
				new CameraValue("+4 2/3", 37, 4.666666666666667, PropertyID.ExposureCompensation),
				new CameraValue("+4 1/2", 36, 4.5, PropertyID.ExposureCompensation),
				new CameraValue("+4 1/3", 35, 4.333333333333333, PropertyID.ExposureCompensation),
				new CameraValue("+4", 32, 4.0, PropertyID.ExposureCompensation),
				new CameraValue("+3 2/3", 29, 3.6666666666666665, PropertyID.ExposureCompensation),
				new CameraValue("+3 1/2", 28, 3.5, PropertyID.ExposureCompensation),
				new CameraValue("+3 1/3", 27, 3.3333333333333335, PropertyID.ExposureCompensation),
				new CameraValue("+3", 24, 3.0, PropertyID.ExposureCompensation),
				new CameraValue("+2 2/3", 21, 2.6666666666666665, PropertyID.ExposureCompensation),
				new CameraValue("+2 1/2", 20, 2.5, PropertyID.ExposureCompensation),
				new CameraValue("+2 1/3", 19, 2.3333333333333335, PropertyID.ExposureCompensation),
				new CameraValue("+2", 16, 2.0, PropertyID.ExposureCompensation),
				new CameraValue("+1 2/3", 13, 1.6666666666666665, PropertyID.ExposureCompensation),
				new CameraValue("+1 1/2", 12, 1.5, PropertyID.ExposureCompensation),
				new CameraValue("+1 1/3", 11, 1.3333333333333333, PropertyID.ExposureCompensation),
				new CameraValue("+1", 8, 1.0, PropertyID.ExposureCompensation),
				new CameraValue("+2/3", 5, 0.66666666666666663, PropertyID.ExposureCompensation),
				new CameraValue("+1/2", 4, 0.5, PropertyID.ExposureCompensation),
				new CameraValue("+1/3", 3, 0.33333333333333331, PropertyID.ExposureCompensation),
				ExpCompValues.Zero,
				new CameraValue("–1/3", 253, -0.33333333333333331, PropertyID.ExposureCompensation),
				new CameraValue("–1/2", 252, -0.5, PropertyID.ExposureCompensation),
				new CameraValue("–2/3", 251, -0.66666666666666663, PropertyID.ExposureCompensation),
				new CameraValue("–1", 248, -1.0, PropertyID.ExposureCompensation),
				new CameraValue("–1 1/3", 245, -1.3333333333333333, PropertyID.ExposureCompensation),
				new CameraValue("–1 1/2", 244, -1.5, PropertyID.ExposureCompensation),
				new CameraValue("–1 2/3", 243, -1.6666666666666665, PropertyID.ExposureCompensation),
				new CameraValue("–2", 240, -2.0, PropertyID.ExposureCompensation),
				new CameraValue("–2 1/3", 237, -2.3333333333333335, PropertyID.ExposureCompensation),
				new CameraValue("–2 1/2", 236, -2.5, PropertyID.ExposureCompensation),
				new CameraValue("–2 2/3", 235, -2.6666666666666665, PropertyID.ExposureCompensation),
				new CameraValue("–3", 232, -3.0, PropertyID.ExposureCompensation),
				new CameraValue("-3 1/3", 229, -3.3333333333333335, PropertyID.ExposureCompensation),
				new CameraValue("-3 1/2", 228, -3.5, PropertyID.ExposureCompensation),
				new CameraValue("-3 2/3", 227, -3.6666666666666665, PropertyID.ExposureCompensation),
				new CameraValue("-4", 224, -4.0, PropertyID.ExposureCompensation),
				new CameraValue("-4 1/3", 221, -4.333333333333333, PropertyID.ExposureCompensation),
				new CameraValue("-4 1/2", 220, -4.5, PropertyID.ExposureCompensation),
				new CameraValue("-4 2/3", 219, -4.666666666666667, PropertyID.ExposureCompensation),
				new CameraValue("-5", 216, -5.0, PropertyID.ExposureCompensation),
				ExpCompValues.Invalid
			};
		}

		public static CameraValue GetValue(int value)
		{
			return ValueBase.GetValue(value, ExpCompValues.values);
		}

		public static CameraValue GetValue(string value)
		{
			return ValueBase.GetValue(value, ExpCompValues.values);
		}

		public static CameraValue GetValue(double value)
		{
			return ValueBase.GetValue(value, ExpCompValues.values);
		}
	}
}
